<?php

class Estados extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->datosusuario = $this->authentication->getDataLogged();
        $this->datoscausa = $this->session->userdata('causa');
        $this->load->model('m_estado', 'estado');
        $this->load->model('m_causa_x_estado', 'causa_x_estado');
        $this->load->model('m_fuero', 'fuero');
        $this->load->model('m_documento', 'documento');
        $this->load->model('m_documento_x_causa_x_estado', 'documento_x_causa_x_estado');
        $this->load->model('m_valoracion', 'valoracion');
        $this->load->model('m_demandado', 'demandado');

        $causa = $this->session->userdata('causa');
        $this->authentication->puedeVerCausa($causa['id']);
    }

    /**
     * Listado de estudio estado.
     *
     * @return void
     */
    function index() {
        $estados = $this->estado->getList();

        $fueros_array = $this->fuero->getList();

        foreach ($fueros_array as $value) {
            $fueros[$value->id] = $value->nombre;
        }

        $data = array(
            'titulo' => 'Listado de Estados Procesales',
            'datosusuario' => $this->datosusuario,
            'estados' => $estados,
            'fueros' => $fueros,
            'seleccionar' => 'parametricas',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('parametricas/leftbar');
        $this->load->view('estados/index');
        $this->load->view('templates/footer');
    }

    /**
     * Crea un nuevo estado.
     *
     * @return void
     */
    function nuevo() {

        $this->form_validation->set_rules($this->estado->getValidacion());
        if ($this->form_validation->run() === FALSE) {
            if (isset($_POST['submit'])) {
                set_message(array('3' => validation_errors()));
                $estado = $_POST;
            } else {
                $estado = $this->estado->valoresPorDefecto();
            }

            $fueros_array = $this->fuero->getList();

            $fueros[''] = 'Seleccione un Fuero';

            foreach ($fueros_array as $value) {
                $fueros[$value->id] = $value->nombre;
            }

            $data = array(
                'datosusuario' => $this->datosusuario,
                'titulo' => 'Nuevo Estado Procesal',
                'estado' => $estado,
                'fueros' => $fueros,
                'seleccionar' => 'parametricas',
            );

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('parametricas/leftbar');
            $this->load->view('estados/form');
            $this->load->view('templates/footer');
        } else {
            $this->estado->setAttributes($this->input);

            $this->estado->id = null;

            $this->estado->save();

            set_message(array('1' => 'Se ha agregado un nuevo estado procesal: "' . $this->estado->nombre . '".'));

            redirect('estados/');
        }
    }

    function nuevo_popup() {
        $causa = $this->session->userdata('causa');

        $this->form_validation->set_rules($this->estado->getValidacion());
        if ($this->form_validation->run() === FALSE) {
            if (isset($_POST['submit'])) {
                set_message(array('3' => validation_errors()));
                $estado = $_POST;
            } else {

                $estado = $this->estado->valoresPorDefecto();
                $estado['fueroId'] = $causa['fueroId'];
            }

            $fueros_array = $this->fuero->getList();

            $fueros[''] = 'Seleccione un Estado';

            foreach ($fueros_array as $value) {
                $fueros[$value->id] = $value->nombre;
            }

            $data = array(
                'datosusuario' => $this->datosusuario,
                'titulo' => 'Nuevo Estado Procesal',
                'estado' => $estado,
                'fueros' => $fueros,
                'popup' => true,
            );

            $this->load->view('templates/header', $data);
            $this->load->view('estados/form');
            $this->load->view('templates/footer');
        } else {
            $this->estado->setAttributes($this->input);
            $this->estado->id = null;
            $this->estado->save();

            $data = array(
                'valor' => $this->estado->id,
                'nombre' => $this->estado->nombre,
            );
            $this->load->view('estados/retorno_valor', $data);
        }
    }

    /**
     * Edita un estado procesal.
     *
     * @param integer $id El ID del estado para editar.
     * @return void
     */
    function editar($id = '') {

        if ($id == '')
            redirect('estados/');


        if ($this->estado->get((int) $id)) {

            $this->form_validation->set_rules($this->estado->getValidacion(true));
            if ($this->form_validation->run() === FALSE) {
                if (isset($_POST['submit'])) {
                    set_message(array('3' => validation_errors()));
                    $estado = $_POST;
                } else {
                    $estado = $this->estado->doArray();
                }

                $fueros_array = $this->fuero->getList();

                $fueros[''] = 'Seleccione un Estado Procesal';

                foreach ($fueros_array as $value) {
                    $fueros[$value->id] = $value->nombre;
                }

                $data = array(
                    'datosusuario' => $this->datosusuario,
                    'titulo' => 'Editar Estado Procesal',
                    'estado' => $estado,
                    'fueros' => $fueros,
                    'seleccionar' => 'parametricas',
                    'editar' => true,
                );

                $this->load->view('templates/header', $data);
                $this->load->view('templates/topbar');
                $this->load->view('parametricas/leftbar');
                $this->load->view('estados/form');
                $this->load->view('templates/footer');
            } else {
                $_POST['id'] = $this->estado->id;

                $this->estado->setAttributes($this->input);
                $this->estado->save();

                set_message(array('1' => 'Se ha editado el estado: ' . $this->estado->nombre . '.'));

                redirect('estados/');
            }
        } else {
            redirect('estados/');
        }
    }

    /*
     * Lista todas los estados de una causa.
     */

    function ver_estados_causa() {
        $causa = $this->session->userdata('causa');
        $this->authentication->puedeVerCausa($causa['id']);

        $estados = $this->estado->getListPorCausaId($causa['id']);

        $fueros_array = $this->fuero->getList();

        foreach ($fueros_array as $value) {
            $fueros[$value->id] = $value->nombre;
        }

        $data = array(
            'titulo' => 'Historial de Estados Procesales',
            'datosusuario' => $this->datosusuario,
            'datoscausa' => $this->datoscausa,
            'estados' => $estados,
            'fueros' => $fueros,
            'seleccionar' => 'causas',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('causas/leftbarcausa');
        $this->load->view('estados/index_causa');
        $this->load->view('templates/footer');
    }

    function valoraciones() {
        if (isset($_POST['submit'])) {
            $i = 0;
            foreach ($_POST['id'] as $id) {
                $this->valoracion->get($id);
                $this->valoracion->valoracion = $_POST['valoracion'][$i];
                $this->valoracion->observacion = $_POST['observacion'][$i];
                $this->valoracion->save();
                $i++;
            }

            set_message(array('1' => 'Se han guardado las valoreciones.'));
            redirect('causas/estados');
        } else {
            if (isset($_SESSION['estadoId'])) {
                $estadoId = $_SESSION['estadoId'];
            } else {
                redirect('causas/estados');
            }

            $valoraciones = $this->valoracion->getListPorEstadoId($estadoId);

            $data = array(
                'titulo' => 'Agregar Valoración a Estado Procesal',
                'datosusuario' => $this->datosusuario,
                'datoscausa' => $this->datoscausa,
                'valoraciones' => $valoraciones,
                'lista_valoraciones' => getListValoreciones(),
                'seleccionar' => 'causas',
            );

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('causas/leftbarcausa');
            $this->load->view('estados/form_valoracion');
            $this->load->view('templates/footer');
        }
    }

    /**
     * Agrega un estado a una causa.
     *
     * @return void
     */
    function valoracion($estadoId = '') {
        $causa = $this->session->userdata('causa');
        $_SESSION['estadoId'] = $estadoId;

        $valoraciones = $this->valoracion->getListPorEstadoId($estadoId);

        $list_mat = array();
        foreach ($valoraciones as $valoracion) {
            $list_mat[] = $valoracion->demandadoId;
        }

        $demandados_array = $this->demandado->getListPorCausaId($causa['id']);

        $paso = false;

        foreach ($demandados_array as $demandado) {
            if (!in_array($demandado->id, $list_mat) AND !empty($estadoId)) {
                $this->valoracion->id = null;
                $this->valoracion->demandadoId = $demandado->id;
                $this->valoracion->causaXestadoId = $estadoId;
                $this->valoracion->valoracion = 0;
                $this->valoracion->observacion = '';
                $this->valoracion->save();
                $paso = true;
            }
        }

        redirect('estados/valoraciones/');
    }

    /**
     * Agrega un estado a una causa.
     *
     * @return void
     */
    function agregar_estado_causa() {
        $causa = $this->session->userdata('causa');
        $this->authentication->puedeVerCausa($causa['id']);

        $this->form_validation->set_rules($this->causa_x_estado->getValidacion());
        if ($this->form_validation->run() === FALSE) {
            $documentos = array();

            if (isset($_POST['submit'])) {
                set_message(array('3' => validation_errors()));
                $estado = $_POST;

                if (isset($_POST['documento'])) {
                    foreach ($_POST['documento'] as $id) {
                        $this->documento->get($id);
                        $documentos[$id]->id = $this->documento->id;
                        $documentos[$id]->nombre = $this->documento->nombre;
                        $documentos[$id]->descripcion = $this->documento->descripcion;
                    }
                }
            } else {
                $estado = $this->causa_x_estado->valoresPorDefecto();
            }

            $estados_array = $this->estado->getList(array('fueroId' => $causa['fueroId']));

            $estados[''] = 'Seleccione un Estado';

            foreach ($estados_array as $value) {
                $estados[$value->id] = $value->nombre;
            }

            $data = array(
                'titulo' => 'Agregar Estado Procesal',
                'datosusuario' => $this->datosusuario,
                'datoscausa' => $this->datoscausa,
                'estados' => $estados,
                'estado' => $estado,
                'documentos' => $documentos,
                'pathdocumento' => PATH_UPLOAD . $this->datoscausa['id'] . '/',
                'seleccionar' => 'causas',
                'nuevo' => '1',
            );

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('causas/leftbarcausa');
            $this->load->view('estados/form_causa');
            $this->load->view('templates/footer');
        } else {
            $this->load->model('m_logs', 'logs');
            $_POST['fechaEstado'] = normal_to_database_date($_POST ['fechaEstado']);

            $this->causa_x_estado->setAttributes($this->input);
            $this->causa_x_estado->id = null;
            $this->causa_x_estado->causaId = $causa['id'];
            $this->causa_x_estado->usuarioId = $this->datosusuario['id'];
            $this->causa_x_estado->fecha = gmdate('Y-m-d');

            $this->causa_x_estado->save();

            $this->causa_x_estado->logs('nuevo', $this->datosusuario['id'], $this->logs);

            if (isset($_POST['documento'])) {
                foreach ($_POST['documento'] as $id) {
                    $this->documento_x_causa_x_estado->documentoId = $id;
                    $this->documento_x_causa_x_estado->causasXestadosId = $this->causa_x_estado->id;
                    $this->documento_x_causa_x_estado->id = null;
                    $this->documento_x_causa_x_estado->save();
                }
            }

            set_message(array('1' => 'Se ha agregado un nuevo estado a la causa.'));

            redirect('causas/estados');
        }
    }

    /**
     * Agrega un estado a una causa.
     *
     * @return void
     */
    function editar_estado_causa($id = '') {
        $causa = $this->session->userdata('causa');
        $this->authentication->puedeVerCausa($causa['id']);

        if ($id == '')
            redirect('causas/estados/');


        if ($this->causa_x_estado->get((int) $id)) {

            $this->form_validation->set_rules($this->causa_x_estado->getValidacion());
            if ($this->form_validation->run() === FALSE) {
                $documentos = array();

                if (isset($_POST['submit'])) {
                    set_message(array('3' => validation_errors()));
                    $estado = $_POST;

                    if (isset($_POST['documento'])) {
                        foreach ($_POST['documento'] as $id) {
                            $this->documento->get($id);
                            $documentos[$id]->id = $this->documento->id;
                            $documentos[$id]->nombre = $this->documento->nombre;
                            $documentos[$id]->descripcion = $this->documento->descripcion;
                        }
                    }
                } else {
                    $this->causa_x_estado->fechaEstado = database_to_normal_date($this->causa_x_estado->fechaEstado);
                    $estado = $this->causa_x_estado->doArray();

                    $documentos_x_causas_x_estados = $this->documento_x_causa_x_estado->getList(array('causasXestadosId' => $this->causa_x_estado->id));
                    if (isset($documentos_x_causas_x_estados)) {
                        foreach ($documentos_x_causas_x_estados as $documento_x_causa_x_estado) {
                            $this->documento->get($documento_x_causa_x_estado->documentoId);
                            $documentos[$this->documento->id]->id = $this->documento->id;
                            $documentos[$this->documento->id]->nombre = $this->documento->nombre;
                            $documentos[$this->documento->id]->descripcion = $this->documento->descripcion;
                        }
                    }
                }

                $estados_array = $this->estado->getList(array('fueroId' => $causa['fueroId']));

                $estados[''] = 'Seleccione un Estado Procesal';

                foreach ($estados_array as $value) {
                    $estados[$value->id] = $value->nombre;
                }

                $data = array(
                    'titulo' => 'Editar Estado Procesal',
                    'datosusuario' => $this->datosusuario,
                    'datoscausa' => $this->datoscausa,
                    'estados' => $estados,
                    'estado' => $estado,
                    'documentos' => $documentos,
                    'pathdocumento' => PATH_UPLOAD . $this->datoscausa['id'] . '/',
                    'seleccionar' => 'causas',
                    'id' => $id,
                );

                $this->load->view('templates/header', $data);
                $this->load->view('templates/topbar');
                $this->load->view('causas/leftbarcausa');
                $this->load->view('estados/form_causa');
                $this->load->view('templates/footer');
            } else {
                $this->load->model('m_logs', 'logs');
                $_POST['fechaEstado'] = normal_to_database_date($_POST ['fechaEstado']);

                $_POST['id'] = $this->causa_x_estado->id;
                $this->causa_x_estado->setAttributes($this->input);
                $this->causa_x_estado->causaId = $causa['id'];
                $this->causa_x_estado->usuarioId = $this->datosusuario['id'];
                $this->causa_x_estado->fecha = gmdate('Y-m-d');

                $this->causa_x_estado->save();

                $this->causa_x_estado->logs('actualizar', $this->datosusuario['id'], $this->logs);

                $documentos_x_causas_x_estados = $this->documento_x_causa_x_estado->getList(array('causasXestadosId' => $this->causa_x_estado->id));
                $documentos_adjuntos = array();
                if (isset($documentos_x_causas_x_estados)) {
                    foreach ($documentos_x_causas_x_estados as $documento_x_causa_x_estado) {
                        $documentos_adjuntos[] = $documento_x_causa_x_estado->documentoId;
                    }
                }

                if (isset($_POST['documento'])) {
                    foreach ($_POST['documento'] as $id) {
                        if (!in_array($id, $documentos_adjuntos)) {
                            $this->documento_x_causa_x_estado->documentoId = $id;
                            $this->documento_x_causa_x_estado->causasXestadosId = $this->causa_x_estado->id;
                            $this->documento_x_causa_x_estado->id = null;
                            $this->documento_x_causa_x_estado->save();
                        }
                    }
                }

                set_message(array('1' => 'Se ha editado el estado de la causa.'));

                redirect('causas/estados');
            }
        }
    }

    /**
     * Agrega un estado a una causa.
     *
     * @return void
     */
    function eliminar_estado_causa($id = '') {
        $causa = $this->session->userdata('causa');
        $this->authentication->puedeVerCausa($causa['id']);

        if ($id == '')
            redirect('causas/estados/');

        if ($this->causa_x_estado->get((int) $id)) {
            $this->load->model('m_logs', 'logs');
            $documentos_x_causas_x_estados = $this->documento_x_causa_x_estado->getList(array('causasXestadosId' => $this->causa_x_estado->id));
            if (isset($documentos_x_causas_x_estados)) {
                foreach ($documentos_x_causas_x_estados as $documento_x_causa_x_estado) {
                    $this->documento_x_causa_x_estado->get($documento_x_causa_x_estado->id);
                    $this->documento_x_causa_x_estado->delete();
                }
            }

            $this->causa_x_estado->logs('eliminar', $this->datosusuario['id'], $this->logs);
            $this->causa_x_estado->delete();
            set_message(array('1' => 'Se ha eliminado el estado de la causa.'));
        }

        redirect('causas/estados/');
    }

    public function eliminar_documento() {

        if ($this->documento_x_causa_x_estado->getPorDocumentoId((int) $_GET['id'])) {
            $this->documento_x_causa_x_estado->delete();
        }
    }

}

